package 图形界面设计;

import javax.swing.*;
import java.util.Random;

//创建游戏界面
//该类的父类要继承JFrame,表示创建一个界面
public class Gameframe extends JFrame {
    //设置无参构造器，方便直接创建界面，并让界面直接显示出来
    public Gameframe() {
        //ctrl+B,快速跳转该方法位置
        //alt+回车键，可以快速将选中的代码块变成方法体
        frame1();//初始化界面设置
        aboutFrame();//初始化程序功能菜单设置
        image();//添加管理容器在界面
        //打乱图片顺序
        dateexchange();
        //this可以不写，该功能表示让程序可视化
        this.setVisible(true);//最好写在程序最后面，否则程序可能有问题
    }

    private int[][] dateexchange() {
        int[] arr0 ={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16};
        Random r = new Random();
        int[][] arr = new int[4][4];//定义一个4*4的二维数组
        int temp = 0;//临时存储数据
        //打乱一维数组
        for (int i = 0; i < arr0.length; i++) {
                int count = r.nextInt(arr0.length);//表示数组的索引,0-15
                temp = arr0[i];
                arr0[i] = arr0[count];
                arr0[count] = temp;
        }
        //将打乱后的一维数组赋值给二维数组
        int count = 0;
        for (int i = 0; i < 4; i++) {
            for (int j = 0; j < 4; j++) {
                arr[i][j] = arr0[count];
                count++;
            }
        }
        return arr;
    }

    private void image() {
        //外循环，给行添加图片
        int[][] a = dateexchange();
        for (int i = 0; i < 4; i++) {
            //内循环，给列添加图片
            for (int j = 0; j < 4; j++) {
                int b = a[i][j];
                //创建一个imageIcon对象
                //图片路径从image包中，找图片，右键->copy path->absulute..,然后回车
                ImageIcon icon = new ImageIcon("C:\\Users\\tanxing\\Desktop\\编程代码练习\\java练习\\java1\\src\\image\\" + b + ".jpg");
                //创建一个管理容器
                JLabel jLabel = new JLabel(icon);//把icon放进去，表示，该容器专门管理该对象
                //管理容器位置与大小，左上角为原点 即0,0，本设置需在添加进界面前设置
                //添加16张图片，4*4排列，界面宽为1024，长576，所以每个容器长为1024/4=144，宽576/4=256
                jLabel.setBounds(256 * j, 144 * i, 256, 144);
                //this表示本类，add往界面添加JLable容器
                //this.add(jLabel);//默认居中，frame1();方法中已经取消界面默认的位置
                this.getContentPane().add(jLabel);//与上面一句同效,不过这个容器是创建界面时就被创建出来的

            }

/*        int a = 1;//循环添加图片
        //外循环，给行添加图片
        for (int i = 0; i < 4; i++) {
            //内循环，给列添加图片
            for (int j = 0; j < 4; j++) {
                //创建一个imageIcon对象
                //图片路径从image包中，找图片，右键->copy path->absulute..,然后回车
                ImageIcon icon = new ImageIcon("C:\\Users\\tanxing\\Desktop\\编程代码练习\\java练习\\java1\\src\\image\\"+a+".jpg");
                //创建一个管理容器
                JLabel jLabel = new JLabel(icon);//把icon放进去，表示，该容器专门管理该对象
                //管理容器位置与大小，左上角为原点 即0,0，本设置需在添加进界面前设置
                //添加16张图片，4*4排列，界面宽为1024，长576，所以每个容器长为1024/4=144，宽576/4=256
                jLabel.setBounds(256*j,144*i,256,144);
                //this表示本类，add往界面添加JLable容器
                //this.add(jLabel);//默认居中，frame1();方法中已经取消界面默认的位置
                this.getContentPane().add(jLabel);//与上面一句同效,不过这个容器是创建界面时就被创建出来的
                a++;
            }
        }*/

            //上面是循环添加图片，下面只能添加一个图片
/*        //创建一个imageIcon对象
        //图片路径从image包中，找图片，右键->copy path->absulute..,然后回车
        ImageIcon icon = new ImageIcon("C:\\Users\\tanxing\\Desktop\\编程代码练习\\java练习\\java1\\src\\image\\1.jpg");
        //创建一个管理容器
        JLabel jLabel = new JLabel(icon);//把icon放进去，表示，该容器专门管理该对象
        //管理容器位置与大小，左上角为原点 即0,0，本设置需在添加进界面前设置
        jLabel.setBounds(0,0,256,144);
        //this表示本类，add往界面添加JLable容器
        //this.add(jLabel);//默认居中，frame1();方法中已经取消界面默认的位置
        this.getContentPane().add(jLabel);//与上面一句同效,不过这个容器是创建界面时就被创建出来的*/
        }
    }

    private void frame1() {
        this.setSize(1038,700);//原长宽为1024*576
        //设置标题
        setTitle("拼图小界面");
        //设置置顶
        setAlwaysOnTop(true);
        //设置居中
        setLocationRelativeTo(null);
        //设置关闭方式。3表示关闭页面即程序关闭运行
        setDefaultCloseOperation(3);
        //取消界面中，添加容器时默认的居中放置，只有取消了才会按照XY轴的形式添加组件
        this.setLayout(null);
    }

    private void aboutFrame() {
        //创建菜单栏
        JMenuBar jMenuBar = new JMenuBar();
        //创建菜单选项
        JMenu funtionjMenu1 = new JMenu("功能");
        JMenu aboutjMenu2 = new JMenu("关于我们");
        //创建菜单选项的功能
        JMenuItem jMenuItem1 = new JMenuItem("更换图片");
        JMenuItem jMenuItem2 = new JMenuItem("重新游戏");
        JMenuItem jMenuItem3 = new JMenuItem("重新登陆");
        JMenuItem jMenuItem4 = new JMenuItem("关闭游戏");
        JMenuItem jMenuItem5 = new JMenuItem("公众号");
        //往菜单栏1,添加选项
        funtionjMenu1.add(jMenuItem1);
        funtionjMenu1.add(jMenuItem2);
        funtionjMenu1.add(jMenuItem3);
        funtionjMenu1.add(jMenuItem4);
        //往菜单栏2,添加选项
        aboutjMenu2.add(jMenuItem5);
        //往菜单栏添加菜单选项
        jMenuBar.add(funtionjMenu1);
        jMenuBar.add(aboutjMenu2);
        //往界面添加菜单栏
        this.setJMenuBar(jMenuBar);
    }
}
